/**
 * ES6新增，是一个类 new Proxy(target, handler)
 * 用于创建一个对象的代理对象，可以实现对对象的监听
 */
const obj = {
  name: 'lk',
  age: 19,
  _address: 'bj',
  get address() {
    return this._address
  },
  set address(v) {
    this._address = v
  }
}

const objProxy = new Proxy(obj, {
  get(target, p, receiver) {
    console.log('===get===')
    console.log(receiver)
    //Reflect中的receiver将会替代被代理对象中get方法中的this,如果用的不是objProxy这个receiver，get也只会执行一次
    return Reflect.get(target, p, {_address: 'this is new value'})
  },
  set(target, p, value, receiver) {
    console.log('===set===')
    //Reflect中的receiver将会替代被代理对象中set方法中的this,如果用的不是objProxy这个receiver，set也只会执行一次
    Reflect.set(target, p, value, {_addr: 'dd'})
  }
})
console.log(objProxy.address)
objProxy.address = 'km'
console.log(objProxy.address)
// console.log(objProxy.age)
// objProxy.name = 'k'
// console.log(objProxy.name)

/**
 * Proxy有13个捕获器
 * 常用的4个：
 * ①get =====  属性读取操作
 * ②set =====  属性设置操作
 * ③has =====  in操作符
 * ④deleteProperty ===== delete操作符
 */

